package ScalaStudy.chapter06

object Test05_Constructor {
  def main(args: Array[String]): Unit = {


    /////////////////////////////////////////////////////////////////////////////////////////
    //////////////////////////////////////    构造器调用  ////////////////////////////////////
    //////////////////////////////////////根据参数进行调用的////////////////////////////////////


    val student1 = new Student1           //调用类(主构造器)
    student1.Student1()                   //调用类中的一般方法，同时调用了主构造器

    println("===============我是分隔符==================")

    val student2 = new Student1("WangQiang")           //调用辅助构造器1，由于构造器1调用了主构造器，所以先调用主构造器

    println("===============我是分隔符==================")

    val student3 = new Student1("WangQiang", 27) //调用辅助构造器2，2调了1，1调了主构造器，所以先调用主构造器，然后2、1

  }
}

    /////////////////////////////////////////////////////////////////////////////////////////
    ////////////////////////////////////    构造器定义   /////////////////////////////////////
    /////////////////////////////////////////////////////////////////////////////////////////


    //定义一个类
    class Student1() {

      var name: String = _
      var age:  Int = _

    println("1. 主构造方法被调用")

    //声明辅助构造方法
    def this(name: String){
      this()                           //直接调用主构造器
      println("2. 辅助构造方法1被调用")
      this.name = name                 //在辅助构造器中定义name属性
      println(s"name: ${name} age ${age}")
    }

    def this(name: String, age: Int){
      this(name)                             //辅助构造器2调用辅助构造器1，因为构造器1调用了主构造器，所以2也调用了主构造器，这是根据参数进行调用的
      println("3. 辅助构造方法2被调用")
      this.age = age                         //在辅助构造器2中定义age属性
      println(s"name: ${name} age ${age}")
    }

    //定义一个和类名相同的函数

    def Student1():Unit = {
      println("这只是一般方法被调用")
    }

  }








